;(function ($) {
    var data = {
        curPage: 0,
        totalPage: 0,
        rowCount: 0,
        //每页条数
        pageRowSize: 10,
        //跳转页码不合法提示
        pageNumNotLegitimate: "跳转页码请输入正整数！",
        //每页条数不合法提示
        pageSizeNotLegitimate: "每页条数请输入正整数！"
    };

    $.fn.extend({
        initPage: function (options) {
            var settings = $.extend({
                first: '首页',
                last: '尾页',
                prev: '上一页',
                next: '下一页',
                go: '跳转',
                curPage: 0,
                totalPage: 0,
                rowCount: 0,
                mode: 0,
                pageRowSize: 10,
                pageRowSelected: [10,25, 50, 100]
            }, options);
            return this.each(function () {
                var pageOther = '';
                if (settings.mode == 0) {
                    // 构造分页下拉框
                    pageOther += '<select class="page_change" value=' + settings.pageRowSize + ' selected="true">';
                    settings.pageRowSelected.forEach(function (v) {
                        if (v == settings.pageRowSize) {
                            pageOther += '<option value=' + v + ' selected = "selected">' + v + '</option>'
                        } else {
                            pageOther += '<option value=' + v + '>' + v + '</option>'
                        }
                    });
                    pageOther += '</select>';
                } else {
                    // 构造input
                    pageOther += '<input class="page_input" type="text" value=' + settings.pageRowSize + '>';
                }

                // 构造分页组件
                var _template = '<div class="page">' +
                    '<span class="page_details">' +
                    '共<span class="page_rowCount">' + settings.rowCount + '</span>条记录，' +
                    '第<span class="page_curPage">' + settings.curPage + '</span>/' +
                    '<span class="page_totalPage">' + settings.totalPage + '</span>页' +
                    '</span>' +
                    '<div class="page_to">' +
                    '<ul class="flex_parent">' +
                    '<button class="btnFirst page_style">' + settings.first + '</button>' +
                    '<button class="btnPre page_style">' + settings.prev + '</button>' +
                    '<button class="btnNext page_style">' + settings.next + '</button>' +
                    '<button class="btnLast page_style">' + settings.last + '</button>' +
                    '</ul>' +
                    '</div>' +
                    '<div class="page_jump">' +
                    '<ul class="flex_parent">' +
                    '<input type="text" class="page_jump_input" value="">页' +
                    '<button class="btnJump">' + settings.go + '</button>' +
                    pageOther +
                    '<ul class="flex_parent">' +
                    '</div>' +
                    '</div>';
                $(this).append(_template);
            });
        },
        setPage: function (options) {
            $.extend(data, options);
            _this = $(this);
            _this.find('.page_rowCount').html(data.rowCount);
            _this.find('.page_curPage').html(data.curPage);
            _this.find('.page_totalPage').html(data.totalPage);
            _this.find('.btnPre').attr('disabled', false);
            _this.find('.btnNext').attr('disabled', false);
            if (data.curPage == 1 && data.curPage == data.totalPage) {
                _this.find('.btnPre').attr('disabled', true);
                _this.find('.btnNext').attr('disabled', true);
            } else if (data.curPage == 1) {
                _this.find('.btnPre').attr('disabled', true);
            } else if (data.curPage == data.totalPage) {
                _this.find('.btnNext').attr('disabled', true);
            }
            _this.find('.btnFirst').click(function () {
                data.curPage = 1;
                _this.find('.page_curPage').html(data.curPage);
                var pageRow = _this.find('.page_change').val();
                if (pageRow == undefined) {
                    pageRow = _this.find('.page_input').val();
                }
                _this.find('.btnPre').attr('disabled', true);
                if (_this.find('.btnNext').attr('disabled')) {
                    _this.find('.btnNext').attr('disabled', false);
                }
                _this.trigger('clickFirst', [data.curPage, pageRow]);
            });
            _this.find('.btnPre').click(function () {
                if (data.curPage > 1) {
                    data.curPage = data.curPage - 1;
                    _this.find('.page_curPage').html(data.curPage);
                    if (data.curPage == 1) {
                        _this.find('.btnPre').attr('disabled', true);
                    }
                    if (_this.find('.btnNext').attr('disabled')) {
                        _this.find('.btnNext').attr('disabled', false);
                    }
                    var pageRow = _this.find('.page_change').val();
                    if (pageRow == undefined) {
                        pageRow = _this.find('.page_input').val();
                    }
                    _this.trigger('clickPrev', [data.curPage, pageRow]);
                }
            });
            _this.find('.btnNext').click(function () {
                data.totalPage = _this.find('.page_totalPage').html();
                if (data.curPage < data.totalPage) {
                    data.curPage = data.curPage + 1;
                    _this.find('.page_curPage').html(data.curPage);
                    if (_this.find('.btnPre').attr('disabled')) {
                        _this.find('.btnPre').attr('disabled', false);
                    }
                    if (data.curPage == data.totalPage) {
                        _this.find('.btnNext').attr('disabled', true);
                    }
                    var pageRow = _this.find('.page_change').val();
                    if (pageRow == undefined) {
                        pageRow = _this.find('.page_input').val();
                    }
                    _this.trigger('clickNext', [data.curPage, pageRow]);
                }
            });
            _this.find('.btnLast').click(function () {
                data.totalPage = _this.find('.page_totalPage').html();
                data.curPage = data.totalPage;
                _this.find('.page_curPage').html(data.curPage);
                var pageRow = _this.find('.page_change').val();
                if (pageRow == undefined) {
                    pageRow = _this.find('.page_input').val();
                }
                if (_this.find('.btnPre').attr('disabled')) {
                    _this.find('.btnPre').attr('disabled', false);
                }
                _this.find('.btnNext').attr('disabled', true);
                _this.trigger('clickLast', [data.curPage, pageRow]);
            });
            _this.find('.btnJump').click(function () {
                var page = _this.find('.page_jump_input').val();
                if (page == "") {
                    page = 10;
                }
                var reg = /^[1-9]\d*$/;
                data.totalPage = _this.find('.page_totalPage').html();
                if (reg.test(page)) {
                    page = parseInt(page);
                    if (page <= 1) {
                        page = 1;
                        _this.find('.btnPre').attr('disabled', true);
                        if (_this.find('.btnNext').attr('disabled')) {
                            _this.find('.btnNext').attr('disabled', false);
                        }
                    } else if (page >= data.totalPage) {
                        page = data.totalPage;
                        if (_this.find('.btnPre').attr('disabled')) {
                            _this.find('.btnPre').attr('disabled', false);
                        }
                        _this.find('.btnNext').attr('disabled', true);
                    } else {
                        if (_this.find('.btnPre').attr('disabled')) {
                            _this.find('.btnPre').attr('disabled', false);
                        }
                        if (_this.find('.btnNext').attr('disabled')) {
                            _this.find('.btnNext').attr('disabled', false);
                        }
                    }
                    data.curPage = page;
                    _this.find('.page_curPage').html(data.curPage);
                    _this.find('.page_jump_input').val(data.curPage);
                    var pageRow = _this.find('.page_change').val();
                    if (pageRow == undefined) {
                        pageRow = _this.find('.page_input').val();
                        if (!reg.test(pageRow)) {
                            promptMsg(data.pageSizeNotLegitimate);
                            return false;
                        }
                    }
                    _this.trigger('clickGo', [data.curPage, pageRow]);
                } else {
                    promptMsg(data.pageNumNotLegitimate);
                }
            });
            _this.find('.page_change').change(function () {
                data.curPage = 1;
                _this.find('.page_curPage').html(data.curPage);
                _this.find('.page_jump_input').val('');
                _this.find('.btnPre').attr('disabled', true);
                if (_this.find('.btnNext').attr('disabled')) {
                    _this.find('.btnNext').attr('disabled', false);
                }
                var pageRow = _this.find('.page_change').val();
                if (pageRow == undefined) {
                    pageRow = _this.find('.page_input').val();
                }
                _this.trigger('changeRowSize', [data.curPage, pageRow]);
            });

            _this.find('.page_input').blur(function () {
                var page = _this.find('.page_input').val();
                if (page == "") {
                    page = data.pageRowSize;
                }
                var reg = /^[1-9]\d*$/;
                if (reg.test(page)) {
                    data.curPage = 1;
                    _this.find('.page_curPage').html(data.curPage);
                    _this.find('.page_jump_input').val('');
                    _this.find('.btnPre').attr('disabled', true);
                    if (_this.find('.btnNext').attr('disabled')) {
                        _this.find('.btnNext').attr('disabled', false);
                    }
                    _this.trigger('changeRowSize', [data.curPage, page]);
                } else {
                    promptMsg(data.pageSizeNotLegitimate);
                }
            });
        },
        refreshPage: function (options) {
            $.extend(data, options);
            _this = $(this);
            _this.find('.page_rowCount').html(data.rowCount);
            _this.find('.page_curPage').html(data.curPage);
            _this.find('.page_totalPage').html(data.totalPage);
            _this.find('.btnPre').attr('disabled', false);
            _this.find('.btnNext').attr('disabled', false);
            if (data.curPage == 1 && data.curPage == data.totalPage) {
                _this.find('.btnPre').attr('disabled', true);
                _this.find('.btnNext').attr('disabled', true);
            } else if (data.curPage == 1) {
                _this.find('.btnPre').attr('disabled', true);
            } else if (data.curPage == data.totalPage) {
                _this.find('.btnNext').attr('disabled', true);
            }
        }
    });
})(jQuery);